<?php
/**
 * 盛大统一关系消息API的封装
 * 底层接口联系人 高永01
 * 
 * @category   SDO
 * @package    Message
 * @author     qingyun <v.huangqingyun@snda.com> 2010-3-24
 * @copyright  SDO OP
 * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
 * @link       http://www.sdo.com/
 * @since      File available since Release 1.0.0
 */

require_once dirname(__FILE__) . '/SDOSocket.php';

class SDOMessage
{
    /**
     * 发送消息， 相当于发起一个主题
     * 
     * @param Long $sdId 是  盛大统一的用户登录id
     * @param Long $receiverID 是 接收主题的用户id
     * @param String $topicContent 否 当有第三方被拉入主题讨论时, 该用户仅仅添加了一条主题，内容已经存在
     * @return Array
     * [code]
     * Array
     * (
     * 		[success] => ture/false		添加主题是否成功
     * 		[updatetime] => 2010-03-24T21:44:47.142+08:00 创建时间
     * )
     * [/code]
     */
    public static function addTopic($sdId, $receiverId, $topicContent = '')
    {
        $apiParams = array(
            'sdid' => $sdId,
            'receiverid' => $receiverId,
            'content' => $topicContent,
        );
        
        $apiName = 'TopicService.addTopic';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 查询某个用户所有的主题
     * 
     * @param Long $sdId 是 盛大统一的用户登录Id
     * @param Integer $startIndex 否 记录初始位置
     * @param Integer $count  否  每页的记录条数
     * @return Array
     */
    public static function queryTopic($sdId, $startIndex = 0, $count = 0)
    {
        $apiParams = array(
            'sdid' => $sdId,
            'startIndex' => $startIndex,
            'count' => $count,
        );
        
        $apiName = 'TopicService.queryTopic';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 删除某一用户的相关主题
     * 
     * @param Long $sdId 是 盛大统一的用户登录Id
     * @param Integer $topicId 是 要删除的主题id
     * @return Array
     */
    public static function removeTopic($sdId, $topicId)
    {
        $apiParams = array(
            'sdid' => $sdId,
            'topicId' => $topicId,
        );
        
        $apiName = 'TopicService.removeTopic';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 邀请某一用户进入相关主题
     * 
     * @param Long $sdId 是 盛大统一的用户登录Id
     * @param Integer $topicId 是 消息相关联的主题id
     * @return Array
     */
    public static function inviteUser($sdId, $topicId)
    {
        $apiParams = array(
            'sdid' => $sdId,
            'topicId' => $topicId,
        );
        
        $apiName = 'TopicService.inviteUser';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 在某一主题的基础之上回复消息
     * 
     * @param Long $senderId 是 盛大统一的用户登录id
     * @param Integer $topicId 是 相关联的主题id
     * @param String $content 是 消息内容500字节字符串
     */
    public static function addMessageText($senderId, $topicId, $content)
    {
        $apiParams = array(
            'senderid' => $senderId,
            'topicId' => $topicId,
            'content' => $content,
        );
        
        $apiName = 'MessageTextService.addMessageText';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 跟住某一主题id, 查询该主题下的所有消息内容, 支持分页
     * 
     * @param Integer $topicId 是 消息相关联的主题id
     * @param Integer $startIndex 是 分页查询时的页号
     * @param Integer $count 是 每页的记录条数
     * @return Array
     */
    public static function queryMessageText($topicId, $startIndex, $count)
    {
        $apiParams = array(
            'topicId' => $topicId,
            'startIndex' => $startIndex,
            'count' => $count,
        );
        
        $apiName = 'MessageTextService.queryMessageText';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 根据某一主题id 查询该主题下的所有参与者，支持分页
     * 
     * @param Integer $topicId 是 主题Id
     * @param Integer $startIndex 是 分页查询时的页号
     * @param Integer $count 是 每页记录的条数
     * @return Array
     */
    public static function queryTopicActor($topicId, $startIndex, $count)
    {
        $apiParams = array(
            'topicId' => $topicId,
            'startIndex' => $startIndex,
            'count' => $count,
        );
        
        $apiName = 'TopicActorService.queryTopicActor';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 系统向用户添加一个消息提醒
	 * 系统消息目前分7 种类型，不同type 值对应不同的类型。
	 * Type = 1 评论 2：留言 3：回复 4：生日提醒 5：招呼 6：好友通知 7：系统通知
     * 
     * @param Long $senderId 是 发送系统消息的用户sdid，系统发送为0
     * @param Long $receiverId 是 接收系统消息的用户sdid
     * @param Byte $type 是 系统消息类型
     * @param String $content 是 系统消息内容，500字节字符串
     * @return Array
     */
    public static function addSystemNotify($senderId, $receiverId, $type, $content)
    {
        $apiParams = array(
            'senderid' => $senderId,
            'receiverid' => $receiverId,
            'type' => $type,
            'content' => $content
        );
        
        $apiName = 'SystemMessageService.addSystemNotify';
        
        return self::send($apiName, $apiParams);        
    }
    
    /**
     * 查询某一个用户系统消息，支持分页。
     * 
     * @param Long $sdId 是 盛大统一的用户登录id
     * @param Integer $startIndex 是 分页查询时的页号
     * @param Integer $count 是 每页的记录条数
     * @return Array
     */
    public static function querySystemNotifyList($sdId, $startIndex, $count)
    {
        $apiParams = array(
            'sdid' => $sdId,
            'startIndex' => $startIndex,
            'count' => $count,
        ); 

        $apiName = 'SystemMessageService.querySystemNotifyList';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 删除某一用户的系统消息
     * 
     * @param Long $id 是 系统消息id
     * @return Array
     */
    public static function removeSystemNotify($id)
    {
        $apiParams = array(
            'id' => $id,
        );

        $apiName = 'SystemMessageService.removeSystemNotify';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 系统向用户添加一个用户邀请或者游戏邀请消息
	 * 目前邀请分为2 种类型： type= 30 好友邀请 type =31 游戏邀请
     * 
     * @param Long $senderId 是 发送邀请信息的用户sdid，系统发送为0
     * @param Long $receiverId 是 接受邀请信息的用户的sdid
     * @param Byte $type 是 邀请类型 
     * @param String $content 是 邀请信息的内容，500字节字符串
     * @return Array
     */
    public static function addPersonalRequest($senderId, $receiverId, $type, $content)
    {
        $apiParams = array(
            'senderid' => $senderId,
            'receiverid' => $receiverId,
            'type' => $type,
            'content' => $content,
        );
        
        $apiName = 'SystemMessageService.addPersonalRequest';
        
        return self::send($apiName, $apiParams);
    } 
    
    /**
     * 查询某一个用户被邀请消息，支持分页。
     * 
     * @param Long $sdId 是 盛大统一的用户登录id
     * @param Integer $startIndex 是 分页查询时的页号
     * @param Integer $count 是 每页的记录条数
     * @return Array
     */
    public static function queryPersonalRequestList($sdId, $startIndex, $count)
    {
        $apiParams = array(
            'sdid' => $sdId,
            'startIndex' => $startIndex,
            'count' => $count,
        );
        
        $apiName = 'SystemMessageService.queryPersonalRequestList';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 删除某一用户收到的邀请消息
     * 
     * @param Long $id 是 邀请信息id
     * @return Array
     */
    public static function removePersonalRequest($id)
    {
        $apiParams = array(
            'id' => $id,
        );
        
        $apiName = 'SystemMessageService.removePersonalRequest';
        
        return self::send($apiName, $apiParams);
    }
    
    /**
     * 当新增一个用户时，会添加一条关于用户统计的记录
     * 
     * @param Long $sdId 是 盛大统一的用户登录Id
     * @return Array
     */
    public static function addMessageAmount($sdId)
    {
        $apiParams = array(
            'sdid' => $sdId,
        );
        
        $apiName = 'CommonMessageService.addMessageAmount';
        
        return self::send($apiName, $apiParams);
    }
    
	/**
	 * 向服务器端发起请求
	 * @param String $apiName API名称
	 * @param Array  $apiParam API相关参数
	 * @return Array 返回调用的结果
	 */
	static public function send($apiName,$apiParam)
	{
        $result = SDOSocket::send($apiName,$apiParam);
		return $result;
	}
	
   /*
     * 检查返回是否正常
     * @param $result 调用send后的结果
     * @param $Error 返回错误码与信息
     * @return boolean
     */
    static function isError(&$result, &$Error = NULL)
    {
        return SDOSocket::isError($result,$Error);
    }
}